問題解説: ホビットの国 第二のトラブル

問題文

ホビットカンパニーの社長からの1つ目のトラブルを解決した後、社長が嬉しそうに話かけてきた。

ホビット社長「やっぱり君たちにお願いしてよかったよ」

エイト「褒められてるわよ、やったじゃない!」

すると社長が独り言のように呟いた。

ホビット社長「もしかしたら…君たちならあのトラブルを解決してくれるかもしれないな」

エイト「何かあるんですか?」

ホビット社長「実は我が社でOpenStackを構築したのだが、何故かログインできないのだ。もしよければ解決してくれないか?」

アクセスできるサーバ

  • OpenStack All-in-One がセットアップされたサーバ1台のsshのアクセス情報 (sudo権限あり)

達成すべき事項

  • OpenStack Horizon のダッシュボードを開ける状態にする

問題内容

ICTSC7 の運営側で実際に起きたトラブルを(厳密ではないですが)再現したものです。今回は電源に関するトラブルがありましたが、ICTSC7 ではこのようなトラブルがおきており、しかもその際には HotStage 期間に3日を費やすも原因が究明できず、お蔵入りとなったのでありました。

OpenStack Horizon は Python で書かれた WSGIアプリケーションで、OpenStack の各コンポーネントのフロントエンドとしての機能を果たすコンポーネントです。
Horizon の設定ファイルは主に /etc/httpd/conf.d/15-horizon_vhost.conf と /etc/openstack-dashboard/local_settings に記述されていますが、今回は一方のみを変更しています。

この中で、認証サーバである Keystone のエンドポイント等を指定しているのですが、その際に Keystone の API バージョンを誤って指定したことによりトラブルが発生していました。

具体的には、以下の部分を変更して出題しました。

/etc/openstack-dashboard/local_settings 200行目付近

OPENSTACK_KEYSTONE_URL = "http://10.0.0.20:5000/v2.0"

変更後 (問題が起きている状態) は以下です。

OPENSTACK_KEYSTONE_URL = "http://10.0.0.20:5000/v3.0"

回答例

まず、認証情報ですが /root/keystonerc_admin に openstack コマンドを使用する際に使用する認証情報(IDとパスワード等) が記述されています。

問題内容の節にて述べた設定ファイルの変更を元に戻し、た上で、Apache のリスタートを行うことで問題が解決します。
また、Apache をリスタートしてもブラウザからログインができず、エラーもでずにログイン画面からログイン画面にリダイレクトし続ける状態になることがありますが、これはブラウザのセッション(クッキー)を削除することで解決します。
(これについては Keystone 等にも特にエラーログが流れないので、解決に苦労した方もおられるかもしれません。)

想定解は上記の通りでしたが、OPENSTACK_KEYSTONE_URL = "http://10.0.0.20:5000/v3" にすることでも問題が解決するようでした。このあたりは OpenStack のバージョンにも依存してきますね。

講評

/root/keystonerc_admin を使用してのopenstack コマンドを用いた操作は正常に行えることから、 Keystone 側の設定がおかしいわけではないということがある程度予想できます。

その上で、Horizon にのみログインできないという挙動から Horizon の設定における Keystone 関連のエンドポイントのパスやバージョンを確認するというのが運営側の想定解答方針でした。

本問のトラブルは、 OpenStack Ocata では起きないため、意図的に OpenStack Newton を使用して構築された OpenStack 上でのトラブルでした。このバージョンからトラブルに気が付いた方もおられたのでは無いでしょうか。

前回の運営委員が解決できなかったということを踏まえ 、配点がかなり高い問題でしたが、6チームから解答を受け、4チームが正解されました。

おわりに

なかなか OpenStack を手で構築したという方は少ないかもしれませんが、そのような経験があると、全体のコンポーネントの関連性や設定についても理解が深まるため、一度行われてみると良いかもしれません。